circuit MyManyDynamicElementVecFir :
  module MyManyDynamicElementVecFir :
    input clock : Clock
    input reset : UInt<1>
    output io : { flip in : UInt<8>, out : UInt<8>, flip consts : UInt<8>[4]}

    wire _regs_WIRE : UInt<8>[3] @[MyManyDynamicElementVecFir.scala 13:29]
    _regs_WIRE[0] <= UInt<8>("h0") @[MyManyDynamicElementVecFir.scala 13:29]
    _regs_WIRE[1] <= UInt<8>("h0") @[MyManyDynamicElementVecFir.scala 13:29]
    _regs_WIRE[2] <= UInt<8>("h0") @[MyManyDynamicElementVecFir.scala 13:29]
    reg regs : UInt<8>[3], clock with :
      reset => (reset, _regs_WIRE) @[MyManyDynamicElementVecFir.scala 13:21]
    regs[0] <= io.in @[MyManyDynamicElementVecFir.scala 15:24]
    regs[1] <= regs[0] @[MyManyDynamicElementVecFir.scala 16:24]
    regs[2] <= regs[1] @[MyManyDynamicElementVecFir.scala 16:24]
    wire muls : UInt<8>[4] @[MyManyDynamicElementVecFir.scala 20:18]
    node _muls_0_T = mul(io.in, io.consts[0]) @[MyManyDynamicElementVecFir.scala 22:33]
    muls[0] <= _muls_0_T @[MyManyDynamicElementVecFir.scala 22:24]
    node _muls_1_T = mul(regs[0], io.consts[1]) @[MyManyDynamicElementVecFir.scala 23:39]
    muls[1] <= _muls_1_T @[MyManyDynamicElementVecFir.scala 23:24]
    node _muls_2_T = mul(regs[1], io.consts[2]) @[MyManyDynamicElementVecFir.scala 23:39]
    muls[2] <= _muls_2_T @[MyManyDynamicElementVecFir.scala 23:24]
    node _muls_3_T = mul(regs[2], io.consts[3]) @[MyManyDynamicElementVecFir.scala 23:39]
    muls[3] <= _muls_3_T @[MyManyDynamicElementVecFir.scala 23:24]
    wire scan : UInt<8>[4] @[MyManyDynamicElementVecFir.scala 26:18]
    scan[0] <= muls[0] @[MyManyDynamicElementVecFir.scala 28:24]
    node _scan_1_T = add(muls[1], scan[0]) @[MyManyDynamicElementVecFir.scala 29:29]
    node _scan_1_T_1 = tail(_scan_1_T, 1) @[MyManyDynamicElementVecFir.scala 29:29]
    scan[1] <= _scan_1_T_1 @[MyManyDynamicElementVecFir.scala 29:18]
    node _scan_2_T = add(muls[2], scan[1]) @[MyManyDynamicElementVecFir.scala 29:29]
    node _scan_2_T_1 = tail(_scan_2_T, 1) @[MyManyDynamicElementVecFir.scala 29:29]
    scan[2] <= _scan_2_T_1 @[MyManyDynamicElementVecFir.scala 29:18]
    node _scan_3_T = add(muls[3], scan[2]) @[MyManyDynamicElementVecFir.scala 29:29]
    node _scan_3_T_1 = tail(_scan_3_T, 1) @[MyManyDynamicElementVecFir.scala 29:29]
    scan[3] <= _scan_3_T_1 @[MyManyDynamicElementVecFir.scala 29:18]
    io.out <= scan[3] @[MyManyDynamicElementVecFir.scala 32:10]

